float4x4 World;
float4x4 View;
float4x4 Projection;

float4 LightColor;
float3 LightDirection;

float4 AmbientColor;






struct VertexShaderInput
{
    float4 Position : POSITION0;
	float3 Normal : NORMAL0;
};

struct VertexShaderOutput
{
    float4 Position : POSITION0;
	float4 Color : COLOR0;
};




VertexShaderOutput VertexShaderFunction(VertexShaderInput input)
{
    VertexShaderOutput output;

    float4 worldPosition = mul(input.Position, World);
    float4 viewPosition = mul(worldPosition, View);
    output.Position = mul(viewPosition, Projection);
	
	float3 worldNormal =  mul(input.Normal, World);
	float diffuseIntensity = saturate( dot(-LightDirection, worldNormal));
	float4 diffuseColor = LightColor * diffuseIntensity;
	output.Color = diffuseColor + AmbientColor;
	
    return output;
}



float4 PixelShaderFunction(VertexShaderOutput input) : COLOR0
{
    return input.Color;
}





technique Technique1
{
    pass Pass1
    {
        VertexShader = compile vs_1_1 VertexShaderFunction();
        PixelShader = compile ps_1_1 PixelShaderFunction();
    }
}
